package com.tarena.csmall.seckill.service;

import cn.tedu.mall.common.exception.CoolSharkServiceException;
import cn.tedu.mall.common.restful.ResponseCode;
import cn.tedu.mall.pojo.seckill.vo.SeckillSkuVO;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class SeckillSkuService {
    public static final String SECKILL_SKU_STOCK_PREFIX = "seckill:sku:stock:";
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    public static final String SECKILL_SKUS_PREFIX="seckill:skus:";
    public List<SeckillSkuVO> listSkus(Long spuId) {
        String skusKey=SECKILL_SKUS_PREFIX+spuId;
        //操作的是list数据类型
        ListOperations<String, String> opsForList = stringRedisTemplate.opsForList();
        //1.判断缓存有没有
        Boolean hasKey=stringRedisTemplate.hasKey(skusKey);
        if (!hasKey){
            //2.没有数据抛一个异常 预热没有准备好
            throw new CoolSharkServiceException(ResponseCode.BAD_REQUEST,"预热没有做到位");
        }
        //3.有数据解析成list返回
        List<String> skuJsons = opsForList.range(skusKey, 0, -1);
        List<SeckillSkuVO> skus=new ArrayList<>();
        for (String skuJson : skuJsons) {
            //将每个sku的json解析成skuvo对象放到返回list中
            SeckillSkuVO skuVO = JSON.toJavaObject(JSON.parseObject(skuJson), SeckillSkuVO.class);
            skus.add(skuVO);
        }
        return skus;
    }
}
